package com.rustic.server.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rustic.server.po.Rustic;
import com.rustic.server.query.RusticAdminListQuery;
import com.rustic.server.query.RusticUserListQuery;
import com.rustic.server.vo.list.RusticAdminListVO;
import com.rustic.server.vo.list.RusticWebListVO;

import java.util.List;
import java.util.Map;

/**
 * 表[rustic]对应的服务类
 *
 * @author auto
 */

public interface RusticService extends IService<Rustic> {

    String RUSTIC_NOT_EXIST = "乡村不存在";

    /**
     * 查询（根据ID 批量查询）
     *
     * @param idList id列表
     * @return 乡村列表
     */
    List<Rustic> listByIdIn(List<Integer> idList);

    /**
     * 查询（根据ID 批量查询）并转换成Map
     *
     * @param idList id列表
     * @return 乡村列表
     */
    Map<Integer, Rustic> mapByIdIn(List<Integer> idList);

    /**
     * 管理列表查询条件
     *
     * @param query        查询参数
     * @param rusticIdList 乡村id列表
     * @param roleId       管理员角色类型
     * @return 查询条件
     */
    LambdaQueryWrapper<Rustic> toAdminListWrapper(RusticAdminListQuery query, List<Integer> rusticIdList, int roleId);

    /**
     * toAdminListVo
     *
     * @param rusticList rusticList
     * @return AdminListVO
     */
    List<RusticAdminListVO> toAdminListVo(List<Rustic> rusticList);

    /**
     * 乡村管理端分页查询
     *
     * @param query   查询条件
     * @param adminId 管理员id
     * @return 查询结果Page<RusticAdminListVO>
     */
    Page<RusticAdminListVO> getAdminPageList(RusticAdminListQuery query, int adminId);

    /**
     * toWebListVo
     *
     * @param rusticList rusticList
     * @param userId     用户id
     * @return WebListVo
     */
    List<RusticWebListVO> toWebListVo(List<Rustic> rusticList, int userId);

    /**
     * 判断该管理员是否在该乡村的权限在乡村管理员以上
     *
     * @param rusticId 乡村id
     * @param adminId  管理员id
     */
    void isRusticAdmin(int rusticId, int adminId);

    /**
     * 乡村的禁用启用
     *
     * @param rusticId 乡村id
     * @param adminId  管理员id
     */
    void disable(int rusticId, int adminId);

    /**
     * 前台列表查询条件
     *
     * @param query 查询条件
     * @return LambdaQueryWrapper<Rustic>
     */
    LambdaQueryWrapper<Rustic> toUserListWrapper(RusticUserListQuery query);
}
